Thread, Dispatcher ve Backgroundworker Hakkında
Merhabalar, wpf ile bir uygulama geliştirmekteyim. Bu uygulamanın esas amacı bir excel seçerek içindeki verileri alıp veritabanına kaydetmesi. 10 üzerinde tabloya binlerce veri işlerken haliyle UI kısmı donuyor, bunun için thread, backgroundworker kullanmam gerektiğini öğrendim. Türkçe/yabancı bir çok siteyi araştırdım ancak bilgiler çok karışık tam olarak anlayamadım. Ben excelden verileri alınırken programda diğer sayfaya geçerek veriler içinde arama da yapmak istiyorum ancak bir türlü uygulayamadım.
Backgroundworker için kodum;
private void BgWorker_DoWork(object sender, DoWorkEventArgs e)
{
progressbar.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
{
progressbar.Visibility = Visibility.Visible;
});
Thread.Sleep(100);
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
ExcelController.ImportedExcel(txt_MaxLine.Text, txt_Sheet.Text);
}));
}
Burada progressbar xaml kısmında sonsuz döngü halindedir, bw için gerekli kodu yazarak ilk önce progressbarı görünür yapıp daha sonra da bir excel seçtirip excelden verileri veritabanına aktarmasını istedim. Ancak bu kod ile tüm program donuyor ta ki işlem bitene kadar.
Başka bir kodda ise bu iki işlemi iki ayrı metodda tanımladıktan sonra buton'un click eventinde;
private void btn_Import_Click(object sender, RoutedEventArgs e)
{
Thread th=new Thread(Progress);
th.Start();
Thread th1=new Thread(Imported);
th1.Start();
}
Şeklinde bir kod ile işlem yaptırdığımda ise aynı şekilde bw gibi tepkisiz kaldı.
Ben gerçekten bu olayı kavrayamadım, sırf bw kullanan veyahut sırf thread kullanan bazı videolarda işlem yaptırırken UI onlarda donmaz iken bende donuyor bırakın başka sayfaya geçip arama yapmayı, aynı sayfada bulunan UI bile çalışmıyor. Neyi yanlış yapıyorum acaba?